package netzwerk;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.swing.SwingUtilities;

import view.ViewCustomer;

public class TimeReceiverThread extends Thread {

	private ViewCustomer viewCustomer;
	private DatagramSocket dSocket;
	private DatagramPacket packet;
	
	AtomicBoolean timeThreadActive;
	

	public TimeReceiverThread(ViewCustomer viewCustomer, DatagramSocket dSocket, AtomicBoolean timeThreadActive) {
		this.viewCustomer = viewCustomer;
		this.dSocket = dSocket;
		this.timeThreadActive = timeThreadActive;
	}

	@Override
	public void run() {
		while (timeThreadActive.get()) {
			byte answer[] = new byte[1024]; // Maximale Größe 1024
			packet = new DatagramPacket(answer, answer.length);

			// Auf die Antwort warten und Paketdaten in GUI ausgeben
			try {
				dSocket.receive(packet);
				
				final String time = new String(packet.getData(), 0, packet.getLength());

				SwingUtilities.invokeLater(new Runnable() {
					@Override
					public void run() {
						viewCustomer.getTimeLabel().setText(time);
					}
				});
				
			} catch (IOException e) {
				// Wenn beim Senden/Empfangen eine Exception auftritt (z.B. aufgrund von
				// Verbindungsfehlern), wird die Zeit nicht weiter aktualisiert.
				System.out.println("Error while receiving time information. Stop refreshing time.");
				
				timeThreadActive.set(false);

			}
			
		}
	}

}
